iT邦幫忙

2026 iThome 鐵人賽

DAY 20
0
Kubernetes

從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南系列 第 20

【Day 20】K8s 包裝神器:Helm Chart 概念與 Helm Repo 操作

  • 分享至 

  • xImage
  •  

今日目標

  • 理解為什麼在管理複雜應用時,純 YAML 檔(Raw YAMLs)會面臨維護瓶頸。
  • 認識 Kubernetes 生態系中最主流的套件管理工具:Helm
  • 掌握 Helm 的三大核心概念:ChartRepositoryRelease
  • 實戰操作:安裝 Helm CLI、新增官方開源 Repo,並使用 Helm 快速安裝與升級第一個應用。

痛點場景:純 YAML 部署的「痛點大集合」

在過去幾天的學習中,我們每部署一個稍微完整的服務,都需要手動撰寫或複製一堆 YAML 檔:

  • deployment.yaml
  • service.yaml
  • ingress.yaml
  • configmap.yaml
  • secret.yaml
  • pvc.yaml

當專案規模變大時,純 YAML 會帶來以下巨大痛點:

  1. YAML 檔案碎片化:一個稍微複雜的微服務可能包含十幾個 YAML 檔,很難一眼掌握整個應用的全貌。
  2. 缺乏樣板(Template)機制:想要在 Dev、Staging、Prod 三個環境使用不同的副本數或 Image Tag,就必須手動修改每一份 YAML 檔,容易漏改或出錯。
  3. 沒有「套件」概念:如果想在集群中安裝一套現成的開源軟體(例如 Prometheus 監控系統或 Redis 集群),可能要手動 kubectl apply 幾十份別人的 YAML,版本升級或解除安裝時更是惡夢。

Helm 就是為了解決這些問題而生的「Kubernetes 套件管理器(Package Manager)」。


Helm 的三大核心概念

你可以把 Helm 直接類比成 Linux 的 aptyum 或是 Mac 的 Homebrew

Helm 概念 角色比喻 實體內容說明
Chart 軟體安裝包(Recipe) 一個包含了一組 K8s YAML 樣板(Templates)與預設設定檔的資料夾或壓縮檔。
Repository 應用程式商店 / 軟體源 存放與分享各種 Charts 的遠端倉庫(例如 Artifact Hub 或 GitHub Pages)。
Release 已安裝的軟體實例 當你在 K8s 集群中把一個 Chart 安裝跑起來後,該運行實例就稱為一個 Release。

Helm Chart 的標準目錄結構

一個標準的 Helm Chart 目錄大致如下:


my-chart/
├── Chart.yaml          # 定義 Chart 的元資料(名稱、版本號、描述)
├── values.yaml         # 存放所有可供客製化調整的預設變數值
└── templates/          # K8s YAML 樣板目錄(使用 Go Template 語法)
├── deployment.yaml
├── service.yaml
└── _helpers.tpl

  • 核心魔法templates/ 底下的 YAML 不會寫死硬編碼(Hardcoded)的數值,而是用 {{ .Values.replicaCount }} 這樣的變數代替。當執行安裝時,Helm 會自動拿 values.yaml 裡的數值去填滿這些樣板,生成最終的 K8s 資源!

實戰演練:Helm 安裝與應用管理

步驟 1:安裝 Helm CLI

在本地終端機安裝 Helm 命令列工具:

  • macOS (Homebrew)
  brew install helm
  • Windows (Chocolatey)
choco install kubernetes-helm

驗證安裝版本:

helm version

步驟 2:新增 Helm 倉庫(Repository)

我們新增社群中最知名的 Bitnami 開源應用倉庫:

# 新增 bitnami 倉庫
helm repo add bitnami [https://charts.bitnami.com/bitnami](https://charts.bitnami.com/bitnami)

# 更新本地倉庫索引
helm repo update

搜尋倉庫中可用的 Chart(例如搜尋 Nginx):

helm search repo nginx

步驟 3:使用 Helm 一鍵安裝應用(Install)

我們透過 Bitnami 的 Nginx Chart,在集群中安裝一個名為 my-web 的 Release:

helm install my-web bitnami/nginx

輸出預期:

NAME: my-web
LAST DEPLOYED: ...
NAMESPACE: default
STATUS: deployed
REVISION: 1

Helm 會自動幫我們建立好 Deployment、Service、ConfigMap 與 Secret,完全不需要我們手寫一行 YAML!

查看當前集群中由 Helm 管理的 Release 列表:

helm list

步驟 4:動態修改參數與升級(Upgrade)

如果我們想把副本數擴展為 2,並不需要手動去改 Deployment。可以直接透過 --set 參數覆寫 values.yaml 中的設定:

helm upgrade my-web bitnami/nginx --set replicaCount=2

檢查 Pod 數量:

kubectl get pods -l app.kubernetes.io/name=nginx

你會發現 Pod 已經被平滑擴展為 2 個副本!

查看這個 Release 的升級歷史:

helm history my-web

可以看到目前處於 REVISION: 2。如果升級後發現問題,同樣可以使用 helm rollback my-web 1 瞬間退回版本 1。


步驟 5:一鍵完整解除安裝(Uninstall)

當不再需要這個應用時,只需一行指令即可乾淨清空所有相關資源:

helm uninstall my-web

本日小結

今天我們解鎖了 Kubernetes 生態系中最不可或缺的管理神器 Helm

  • 搞懂了 Chart(打包包裝)Repository(儲存庫)Release(部署實例) 的關係。
  • 體驗了透過一行指令快速安裝、升級與回退複雜應用的極速流程。

掌握了 Helm 的基本操作後,明天 Day 21,我們要迎來第三週的整合大實作:「【實作】用 Helm 一鍵部署並客製化 WordPress + MySQL 集群」


上一篇
【Day 19】團隊多租戶隔離:Namespace 劃分與 ResourceQuota 資源限制
下一篇
【Day 21】用 Helm 一鍵部署並客製化 WordPress + MySQL 集群
系列文
從零開始的雲端實戰:30 天 Kubernetes 核心觀念與部署指南30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言